/***************************************************************************
 *   Antc - library                                                        *
 *                                                                         *
 *   Copyright (C) 2008 by kuerant                                         *
 *                         <kuerant@gmail.com>                             *
 *                                                                         *
 *   This library is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU Library General Public License as       *
 *   published by the Free Software Foundation; either version 2 of the    *
 *   License, or (at your option) any later version.                       *
 *                                                                         *
 *   This library is distributed in the hope that it will be usefull, but  *
 *   WITHOUT ANY WARRANTY; without even the implied warranty of            *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      *
 *   Library General Public License for more details.                      *
 *                                                                         *
 *   You should have received a copy of the GNU Library General Public     *
 *   License along with this library; if not, write to the Free Software   *
 *   Foundation, Inc., 59 Temple Place - Suite 330, Boston,                *
 *   MA 02111-1307, USA                                                    *
 ***************************************************************************/


#ifndef ANTC_ANTC_HPP
#define ANTC_ANTC_HPP

#include    <vector>
#include    <string>

#include    "common/exception.hpp"
#include    "antc/message.hpp"

namespace   antc
{

class   Antc
{

public  :
    enum protocol_type {
        TCP = 0x0101,
        UDP = 0x0111
    };
    
public  :

    virtual void    connect( std::string server_address, int server_port = 0 ) throw (ant::Exception) = 0;
    
    virtual void    disconnect( void ) throw (ant::Exception) = 0;
    
    virtual void    join( std::string group ) throw (ant::Exception) = 0;
    
    virtual void    leave( std::string group ) throw (ant::Exception) = 0;
    
    virtual void    query( std::string group, std::vector<std::string>& result ) throw (ant::Exception) = 0;
    
    virtual void    send( Message message, int timeout = -1 ) throw (ant::Exception) = 0;
    
    virtual void    recv( Message& message, int timeout = -1 ) throw (ant::Exception) = 0;   
    
public  :
    static  Antc*   create( int iFlags = Antc::TCP ) throw (ant::Exception);
        
    virtual ~Antc() {}
};  // class Antc
    
}   // namespace antc

#endif  // ANTC_ANTC_HPP
